![ChatGPTにIF仕様からDDLとテストデータを作ってもらう](https://devio2023-media.developers.io/wp-content/uploads/2023/03/chatgpt.png)
ChatGPTにIF仕様からDDLとテストデータを作ってもらう
データアナリティクス事業本部のueharaです。
データ分析基盤構築の開発作業の1つに、IF設計仕様からのDDLへの書き起こしと、テーブルをテストするためのテストデータの作成があります。
プロジェクトによってはIF設計書からDDLを起こすマクロや、テストデータを作成するマクロを初めに用意することがありますが、規模があまり大きくないプロジェクトだとマクロを作る工数が費用対効果的に微妙かな...というケースがあります。
とはいえ、人手でやるとミスも起きやすいところなので、今回はChatGPTを使ってノーコードでこれらの作業ができるか試してみます。
前提
IF仕様
今回、検証をするIF仕様として、簡単ですが以下を想定することとします。
項目名 | 型 | 全桁数 | 小数部 | 値の例 |
---|---|---|---|---|
ID | String | 8 | 01234567 | |
名前 | String | 40 | 田中太郎 | |
年齢 | Int | 3 | 45 | |
身長 | Double | 4 | 1 | 172.5 |
体重 | Double | 4 | 1 | 68.1 |
対象のDB
今回、DDLを作成する対象のDBはRedshiftとします。
ChatGPTとのやりとり
DDLの作成
早速、IF仕様を記載して、ChatGPTにDDLの作成をお願いしてみました。
作成してもらったDDLを確認すると、String→VARCHAR、Double→DECIMALの読み替えや、全桁数や小数部を考慮した桁数の設定ができていることがわかります。(凄い!)
更に、以下の仕様に変更するよう追加で要望を出してみます。
- VARCHAR属性の項目の桁数を2倍に
- IDをプライマリーキーに
- 項目名を英語に
急な仕様変更にも嫌な顔1つせず、的確に修正してくれました。
項目が5つ程度だと有り難みが薄いですが、これが数百項目となるとシステム的に処理しないとしんどいので、これらの変換作業がノーコード(ChatGPTに投げる)でできるのは大きいと思います。
テストデータの作成
DDLはこれで良いことをChatGPTに伝え、今度はテストデータを作ってもらいます。
網羅性を考慮すると境界値や異常系のデータも見たほうが良いかと思いますが、今回は検証なので「とりあえず正常にデータを取り込めればOK」くらいの温度感でChatGPTに依頼することにします。
テストデータの作成に際し、以下のように色々注文をつけてみます。
- 項目名のヘッダーは無し
- 各項目の値はダブルクォーテーションで囲む ※数値項目も必ずダブルクォーテーションで囲む
- エスケープ文字は¥
- 文字コードはUTF-8
- カンマ区切りのCSVデータ
- 値は項目名から推測される「それらしい項目」とする ※名前は漢字で
特に、一番最後の「それらしい項目」というのは意地悪です。
機械学習をやられたことがある方ならご存知かと思いますが、一般的に人間が推論で解決しているような曖昧性を持つ課題解決を機械は苦手とします。
例えばHEIGHT DECIMAL(4,1)
の項目を乱数で生成するのは簡単です。
ただ、今回は「それらしい項目」とオーダーしているので、「身長」という項目に対して982.4
というような適当な値ではなく、168.2
といった「いかにもありそうな身長の値」を生成して欲しいわけです。
乱数の範囲を指定しているならまだしも、今回特にそのような指定はしていないので、機械にとっては意地悪なオーダーになります。
では早速ChatGPTからの回答を見てみます。
驚くことに、全てそれっぽい値でテストデータを作成してくれました。
一方で、「数値項目も必ずダブルクォーテーションで囲む」というオーダーが通っていないので、修正をお願いしてみます。
これまた理解がよく、「前にオーダーされていた」ことを素直に認め、新しいテストデータを作成してくれました。
更に欲を出し、UPSERTの挙動を確認するためのテストデータの作成もお願いしてみます。
しっかりとINSERTとUPDATEの両方を確認できるデータを提示頂きましたが、特に次のような提案には驚きました。
UPDATEを行う場合は、既存のデータを変更する必要があります。例えば、IDが00000001の場合、名前を「山田花子」に変更するといった操作が考えられます。ただし、今回は「それらしい値」ということで、名前はそのままに、体重を「60.0」に変更することにしました。更新されたデータは次のようになります。
前に「それらしい項目」と言ったのをここでも意識をしたようで、名前ではなく体重を変更するデータを提供してくれました。
実際には名前が変更になるケースも往々にしてあるかと思いますが(結婚して名字が変わる等)、ChatGPT的には「体重の値を更新する方が自然」と判断したのでしょう。
これは「名前はコロコロ変わらないが体重はコロコロ変わる」とChatGPTが理解している面白い例だと思いました。
最後に
今回、IF仕様からDDLとテストデータをChatGPTに作成してもらうという検証を行いました。
実際使用した感想としては、かなり実用的なレベルで使用できるのではないかと思います。
OfficeとGPT-4が連携する、というニュースも出てきましたので、エクセルでのテストデータ作成などがより簡便になると良いですね。